import Request from 'luch-request';

// 创建请求实例
const http = new Request({
	// baseURL: process.env.NODE_ENV === 'development' ? '/api' : 'https://api.example.com',
	baseURL: 'https://baomingbao.cc/wx-api',
	// baseURL: 'http://192.168.1.51:12010',
	// baseURL: 'http://192.168.1.183:12010',
	timeout: 15000,
	header: {
		'Content-Type': 'application/json'
	}
});

// 白名单接口列表
const whiteList = ['/login']; // 白名单接口，可以根据需要添加更多路径

// 请求拦截器
http.interceptors.request.use(
	(config) => {
		// 如果请求的 URL 在白名单中，跳过 token 校验
		const isWhiteListed = whiteList.some((path) => config.url.includes(path));
		if (!isWhiteListed) {
			// 添加token
			const token = uni.getStorageSync('token');
			if (token) {
				config.header['Authorization'] = `${token}`;
			} else {
				// 如果没有token，跳转到登录页
				uni.showToast({
					title: '请重新登录',
					icon: 'none'
				});
				setTimeout(() => {
					uni.redirectTo({
						url: '/pages/login' // 登录页路径
					});
				}, 1000); // 1秒后跳转到登录页
			}
		}

		// 处理loading状态
		if (config.showLoading !== false) {
			uni.showLoading({ title: '加载中...' });
		}

		return config;
	},
	(error) => {
		return Promise.reject(error);
	}
);

// 响应拦截器
http.interceptors.response.use(
	(response) => {
		uni.hideLoading();

		// 统一处理响应数据
		const res = response.data;
		if (res.code === 401) {
			// token过期或无效
			uni.showToast({
				title: '身份验证已过期，请重新登录',
				icon: 'none'
			});
			// 清除本地存储的 token
			uni.removeStorageSync('token');
			// 跳转到登录页面
			setTimeout(() => {
				uni.redirectTo({
					url: '/pages/login' // 登录页面路径
				});
			}, 1000); // 1秒后跳转
		} else if (res.code === 0) {
			return res
		} else if (res.code !== 200) {
			uni.showToast({
				title: res.msg || '请求失败',
				icon: 'none'
			});
			return Promise.reject(new Error(res.msg || '请求失败'));
		}
		return res.data;
	},
	(error) => {
		uni.hideLoading();

		if (error.statusCode === 401) {
			// token过期或无效
			uni.showToast({
				title: '身份验证已过期，请重新登录',
				icon: 'none'
			});
			// 清除本地存储的 token
			uni.removeStorageSync('token');
			uni.removeStorageSync('userInfo');
			// 跳转到登录页面
			setTimeout(() => {
				uni.redirectTo({
					url: '/pages/login' // 登录页面路径
				});
			}, 1000); // 1秒后跳转
		} else {
			// 处理网络错误
			uni.showToast({
				title: error.msg || '网络异常',
				icon: 'none'
			});
		}

		return Promise.reject(error);
	}
);

export default http;
